package com.pangsir.bookstore.service.impl;

import com.pangsir.bookstore.dao.CartItemDao;
import com.pangsir.bookstore.pojo.Book;
import com.pangsir.bookstore.pojo.Cart;
import com.pangsir.bookstore.pojo.CartItem;
import com.pangsir.bookstore.pojo.User;
import com.pangsir.bookstore.service.BookService;
import com.pangsir.bookstore.service.CartItemService;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class CartItemServiceImpl implements CartItemService {
    private CartItemDao cartItemDao;
    private BookService bookService;
    @Override
    public void addCartItem(CartItem cartItem) {
        cartItemDao.addCartItem(cartItem);
    }

    @Override
    public void updateCartItem(CartItem cartItem, Integer buyCount) {
        cartItemDao.updateCartItem(cartItem,buyCount);
    }

    @Override
    public Cart getCart(User user) {
        Cart cart = new Cart();
        Map<Integer,CartItem> cartItemMap = new HashMap<>();
        List<CartItem> cartItemList = cartItemDao.getCartItemListByUser(user);
        for (CartItem cartItem : cartItemList) {
            Book book = bookService.getBookById(cartItem.getBook().getId());
            cartItem.setBook(book);
            cartItemMap.put(cartItem.getBook().getId(),cartItem);
        }
        cart.setCartItemMap(cartItemMap);
        return cart;
    }

    @Override
    public void addOrUpdateCartItem(CartItem cartItem, Cart cart) {
        if (cart != null) {
            Map<Integer, CartItem> cartItemMap = cart.getCartItemMap();
            if (cartItemMap == null) {
                cartItemMap = new HashMap<>();
            }
            if (cartItemMap.containsKey(cartItem.getBook().getId())) {
                CartItem cartItemTemp = cartItemMap.get(cartItem.getBook().getId());
                cartItemDao.updateCartItem(cartItemTemp,cartItemTemp.getBuyCount() + 1);
            }else {
                cartItemDao.addCartItem(cartItem);
            }
        }else {
            cartItemDao.addCartItem(cartItem);
        }
    }

    @Override
    public void deleteCartItem(CartItem cartItem) {
        cartItemDao.deleteCartItem(cartItem);
    }
}
